// m
// 给定一个数组nums，再给定一个数字k，要求将数组中的元素向右移动k个位置

// 说明：空间复杂度为O(1)的原地算法解 决这个问题

// 步骤：
// 1. 将数组[0, n-1]位置上的元素全部翻转
// 2. 将数组[0, k -1]位置上的元素进行翻转
// 3. 将数组[k, n - 1]位置上的元素进行翻转

// 时间复杂度：O(n)
// 空间复杂度：O(1)

function rotate(nums, k) {
    let n = nums.length
    k = k % n
    reverse(nums, 0, n - 1)
    reverse(nums, 0, k - 1)
    reverse(nums, k, n - 1)
}

function reverse(nums, left, right) {
    while (left < right) {
        let temp = nums[left]
        nums[left] = nums[right]
        nums[right] = temp
        left += 1
        right -= 1
    }
}

let arr = [1, 2, 3, 4, 5, 6, 7]
let k = 3
rotate(arr, k)
console.log(arr);